using Sinacor.Infra.Service.Security.Services;
using Sinacor.Servico.Bovespa.Corretagem.Service.ServiceContract;
using System.Collections.Generic;

namespace Sinacor.Servico.Bovespa.Corretagem.Service.ServiceImplementation
{
    /// <summary>
    /// Implementação do serviço de manutenção de faixas de corretagem
    /// </summary>
	[SinacorServiceBehavior]
	public class FaixaCorretagem : IFaixaCorretagem
	{
		#region Construtor
		/// <summary>
		/// Construtor Padrão
		/// </summary>
		public FaixaCorretagem()
		{
		}
		#endregion
		#region Métodos

        #region AlterarFaixaCorretagem
        /// <summary>
        /// Altera uma faixa de corretagem
        /// </summary>
        /// <tables>
        /// TBOFAIXA
        /// </tables>
        /// <param name="request">DataContract.Request.FaixaCorretagemRequest</param>
        /// <returns></returns>
        public void AlterarFaixaCorretagem(Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Request.FaixaCorretagemRequest request)
        {
            Translator.DataContractToBusinessEntity.FaixaCorretagem tradutorRequest = new Translator.DataContractToBusinessEntity.FaixaCorretagem();
            new BusinessLogic.FaixaCorretagem().AlterarFaixaCorretagem(tradutorRequest.ToFaixaCorretagem(request));

        } 
        #endregion

        #region AlterarFaixasCorretagens
        /// <summary>
        /// Altera uma lista (bloco) de faixas de corretagem
        /// </summary>
        /// <tables>
        /// TBOFAIXA
        /// </tables>
        /// <param name="requests">List<DataContract.Request.FaixaCorretagemRequest></param>
        /// <returns></returns>
        public void AlterarFaixasCorretagens(List<DataContract.Request.FaixaCorretagemRequest> requests)
        {
            Translator.DataContractToBusinessEntity.FaixaCorretagem tradutorRequest = new Translator.DataContractToBusinessEntity.FaixaCorretagem();
            new BusinessLogic.FaixaCorretagem().AlterarFaixasCorretagens(tradutorRequest.ToFaixaCorretagem(requests));
        } 
        #endregion

        #region ConsultarFaixasCorretagens
        /// <summary>
        /// Consulta uma lista de faixas de corretagem
        /// </summary>
        /// <tables>
        /// TBOFAIXA
        /// </tables>
        /// <param name="request">DataContract.Request.FiltroFaixaCorretagemRequest</param>
        /// <returns>List<DataContract.Response.FaixaCorretagemResponse></returns>
        public List<DataContract.Response.FaixaCorretagemResponse> ConsultarFaixasCorretagens(DataContract.Request.FiltroFaixaCorretagemRequest request)
        {
            Translator.DataContractToBusinessEntity.FaixaCorretagem tradutorRequest = new Translator.DataContractToBusinessEntity.FaixaCorretagem();
            Translator.BusinessEntityToDataContract.FaixaCorretagem tradutorResponse = new Translator.BusinessEntityToDataContract.FaixaCorretagem();
            return tradutorResponse.ToFaixaCorretagemResponse(new BusinessLogic.FaixaCorretagem().ConsultarFaixasCorretagens(tradutorRequest.ToFiltroFaixaCorretagem(request)));
        } 
        #endregion

        #region ExcluirFaixaCorretagem
        /// <summary>
        /// Exclui uma faixa de corretagem 
        /// </summary>
        /// <tables>
        /// TBOFAIXA
        /// </tables>
        /// <param name="request">DataContract.Request.FiltroFaixaCorretagemChaveRequest</param>
        /// <returns></returns>
        public void ExcluirFaixaCorretagem(DataContract.Request.FiltroFaixaCorretagemChaveRequest request)
        {
            Translator.DataContractToBusinessEntity.FaixaCorretagem tradutorRequest = new Translator.DataContractToBusinessEntity.FaixaCorretagem();
            new BusinessLogic.FaixaCorretagem().ExcluirFaixaCorretagem(tradutorRequest.ToFiltroFaixaCorretagemChave(request));
        } 
        #endregion

        #region ExcluirFaixasCorretagens
        /// <summary>
        /// Exclui uma lista (bloco) de faixas de corretagem
        /// </summary>
        /// <tables>
        /// TBOFAIXA
        /// </tables>
        /// <param name="requests">List<DataContract.Request.FiltroFaixaCorretagemChaveRequest></param>
        /// <returns></returns>
        public void ExcluirFaixasCorretagens(List<DataContract.Request.FiltroFaixaCorretagemChaveRequest> requests)
        {
            Translator.DataContractToBusinessEntity.FaixaCorretagem tradutorRequest = new Translator.DataContractToBusinessEntity.FaixaCorretagem();
            new BusinessLogic.FaixaCorretagem().ExcluirFaixasCorretagens(tradutorRequest.ToFiltroFaixaCorretagemChave(requests));
        } 
        #endregion

        #region ExecutarTransacoes
        /// <summary>
        /// Efetua a execução de transações de inclusão, alteração e exclusão de faixas de corretagem
        /// </summary>
        /// <tables>
        /// TBOFAIXA
        /// </tables>
        /// <param name="requestInclusoes" >List<DataContract.Request.FaixaCorretagemRequest></param>
        /// <param name="requestAlteracoes">List<DataContract.Request.FaixaCorretagemRequest></param>
        /// <param name="requestExclusoes" >List<DataContract.Request.FiltroFaixaCorretagemChaveRequest></param>
        /// <returns></returns>                
        public void ExecutarTransacoes(List<DataContract.Request.FaixaCorretagemRequest> requestInclusoes, List<DataContract.Request.FaixaCorretagemRequest> requestAlteracoes, List<DataContract.Request.FiltroFaixaCorretagemChaveRequest> requestExclusoes)
        {
            new BusinessLogic.FaixaCorretagem().ExecutarTransacoes(
               new Translator.DataContractToBusinessEntity.FaixaCorretagem().ToFaixaCorretagem(requestInclusoes),
               new Translator.DataContractToBusinessEntity.FaixaCorretagem().ToFaixaCorretagem(requestAlteracoes),
               new Translator.DataContractToBusinessEntity.FaixaCorretagem().ToFiltroFaixaCorretagemChave(requestExclusoes)
               );
        } 
        #endregion

        #region IncluirFaixaCorretagem
        /// <summary>
        /// Inclui uma nova faixa de corretagem
        /// </summary>
        /// <tables>
        /// TBOFAIXA
        /// </tables>
        /// <param name="request">DataContract.Request.FaixaCorretagemRequest</param>
        /// <returns></returns>
        public void IncluirFaixaCorretagem(DataContract.Request.FaixaCorretagemRequest request)
        {
            Translator.DataContractToBusinessEntity.FaixaCorretagem tradutorRequest = new Translator.DataContractToBusinessEntity.FaixaCorretagem();
            new BusinessLogic.FaixaCorretagem().IncluirFaixaCorretagem(tradutorRequest.ToFaixaCorretagem(request));
        } 
        #endregion

        #region IncluirFaixasCorretagens
        /// <summary>
        /// Incluir uma lista (bloco) de faixas de corretagem
        /// </summary>
        /// <tables>
        /// TBOFAIXA
        /// </tables>
        /// <param name="requests">List<DataContract.Request.FaixaCorretagemRequest></param>
        /// <returns></returns>
        public void IncluirFaixasCorretagens(List<DataContract.Request.FaixaCorretagemRequest> requests)
        {
            Translator.DataContractToBusinessEntity.FaixaCorretagem tradutorRequest = new Translator.DataContractToBusinessEntity.FaixaCorretagem();
            new BusinessLogic.FaixaCorretagem().IncluirFaixasCorretagens(tradutorRequest.ToFaixaCorretagem(requests));
        } 
        #endregion

        #region ObterFaixaCorretagem
        /// <summary>
        /// Obtem uma faixa de corretagem pela chave
        /// </summary>
        /// <tables>
        /// TBOFAIXA
        /// </tables>
        /// <param name="request">DataContract.Request.FiltroFaixaCorretagemChaveRequest</param>
        /// <returns>DataContract.Response.FaixaCorretagemResponse</returns>
        public DataContract.Response.FaixaCorretagemResponse ObterFaixaCorretagem(DataContract.Request.FiltroFaixaCorretagemChaveRequest request)
        {
            Translator.DataContractToBusinessEntity.FaixaCorretagem tradutorRequest = new Translator.DataContractToBusinessEntity.FaixaCorretagem();
            Translator.BusinessEntityToDataContract.FaixaCorretagem tradutorResponse = new Translator.BusinessEntityToDataContract.FaixaCorretagem();
            return tradutorResponse.ToFaixaCorretagemResponse(new BusinessLogic.FaixaCorretagem().ObterFaixaCorretagem(tradutorRequest.ToFiltroFaixaCorretagemChave(request)));
        } 
        #endregion

        #region ObterUltimaFaixaCorretagem
        /// <summary>
        /// Obtem a ultima faixa de corretagem baseado na data inicial
        /// </summary>
        /// <tables>
        /// TBOFAIXA
        /// </tables>
        /// <param name="request">DataContract.Request.FiltroFaixaCorretagemChaveRequest</param>
        /// <returns>DataContract.Response.FaixaCorretagemResponse</returns>
        public DataContract.Response.FaixaCorretagemResponse ObterUltimaFaixaCorretagem(DataContract.Request.FiltroFaixaCorretagemChaveRequest request)
        {
            Translator.DataContractToBusinessEntity.FaixaCorretagem tradutorRequest = new Translator.DataContractToBusinessEntity.FaixaCorretagem();
            Translator.BusinessEntityToDataContract.FaixaCorretagem tradutorResponse = new Translator.BusinessEntityToDataContract.FaixaCorretagem();
            return tradutorResponse.ToFaixaCorretagemResponse(new BusinessLogic.FaixaCorretagem().ObterUltimaFaixaCorretagem(tradutorRequest.ToFiltroFaixaCorretagemChave(request)));
        } 
        #endregion
		#endregion
	}
}

